package Spiel.Steuerung;

import Spiel.Objekte.FObjekt;
import Spiel.Objekte.IObjekt;
import Spiel.Objekte.IOrt;
import Spiel.Werte.FDimension;
import Spiel.Werte.FPosition;
import Spiel.Werte.IDimension;
import Spiel.Werte.IPosition;
import Spiel.Werte.IWeg;

public class SteuerungSpiel {

	public static void bewegeObjekt(IObjekt objekt, IPosition position) {
		if (objekt == null) {
			System.out.print("Es gibt kein zu bewegendes Objekt!" + "\n");
			return;
		}
		if (position == null) {
			System.out
					.print("Zu dieser Position kann sich das Objekt nicht bewegen!"
							+ "\n");
			return;
		}
		objekt.setPosition(position);
	}

	public static void bewegeObjekt(IObjekt objekt, IWeg weg) {
		if (objekt == null) {
			System.out.print("Es gibt kein zu bewegendes Objekt!" + "\n");
			return;
		}
		if (weg == null) {
			System.out.print("Dieser Weg kann nicht gegangen werden!" + "\n");
			return;
		}
		SteuerungSpiel.bewegeObjekt(objekt,
				FPosition.verschobenePosition(objekt.getPosition(), weg));
	}

	public static void manipuliereObjekt(IObjekt objekt, IDimension manipulation) {
		if (objekt == null) {
			System.out.print("Es gibt kein zu manipulierendes Objekt!" + "\n");
			return;
		}
		if (manipulation == null) {
			System.out.print("Das Objekt kann so nicht maipuliert werden!!"
					+ "\n");
			return;
		}
		objekt.setDimension(FDimension.dimensionManipulieren(
				objekt.getDimension(), manipulation));
	}

	public static IObjekt sucheKollisionObjekt(IOrt ort, IObjekt eindringling) {
		if (ort == null) {
			System.out.print("In dem Ort kann nicht gesucht werden!" + "\n");
			return null;
		}
		if (eindringling == null) {
			System.out.print("Der Eindringling kann nicht kollidieren!" + "\n");
			return null;
		}
		for (IObjekt objekt : ort.getObjekte()) {
			if (objekt != eindringling) {
				if (FObjekt.istImOrt(objekt, eindringling)) {
					return objekt;
				}
			}
		}
		return null;
	}

	public static void entferneObjektVonOrt(IOrt ort, IObjekt objekt) {
		if (ort == null) {
			System.out.print("In dem Ort kann nichts entfernt werden!" + "\n");
			return;
		}
		if (objekt == null) {
			System.out.print("Das Objekt kann nicht entfernt werden!" + "\n");
			return;
		}
		ort.removeObjekt(objekt);
	}
}
